package com.itdianzi.service.system.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itdianzi.dao.system.ModuleDao;
import com.itdianzi.domain.system.Module;
import com.itdianzi.domain.system.User;
import com.itdianzi.service.system.ModuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Service
public class ModuleServiceImpl implements ModuleService {
    @Autowired
    private ModuleDao moduleDao;

    @Override
    public PageInfo findAll(Integer page, Integer size) {
        PageHelper.startPage(page, size);
        List<Module> moduleList = moduleDao.findAll();
        PageInfo pageInfo = new PageInfo(moduleList);
        return pageInfo;
    }

    @Override
    public List<Module> findAll() {
        return moduleDao.findAll();
    }

    @Override
    public void save(Module module) {
        module.setId(UUID.randomUUID().toString());
        moduleDao.save(module);
    }

    @Override
    public void update(Module module) {
        moduleDao.update(module);
    }

    @Override
    public Module findById(String id) {
        return moduleDao.findById(id);
    }

    @Override
    public void delete(String id) {
        moduleDao.delete(id);
    }

    @Override
    public List<Module> findByRole(String roleid) {
        return moduleDao.findByRoleId(roleid);
    }

    @Override
    public void updateRoleModule(String roleid, String moduleIds) {
        moduleDao.deleteRoleModule(roleid);
        if(moduleIds.length()>0){ //保证用户一定传值 才添加数据
            String[] splitModuleIds = moduleIds.split(",");
            for (String moduleId : splitModuleIds) {
                //添加权限数据
                moduleDao.saveRoleModule(roleid,moduleId);
            }
        }
    }

    @Override
    public List<Module> findByUser(User user) {
        /**
         * degree:
         * 0-saas管理员
         * 1-企业管理员
         * 2-管理所有下属部门和人员
         * 3-管理本部门
         * 4-普通员工
         * belong:
         * 0：sass系统内部菜单
         * 1：租用企业菜单
         */
        List<Module> moduleList = new ArrayList<>();
        if(user.getDegree() == 0 ){//0-saas管理员
            moduleList =  moduleDao.findByBelong("0");//根据身份查询模块的数据
        }else if(user.getDegree() == 1 ){//1-企业管理员
            moduleList =  moduleDao.findByBelong("1");//根据身份查询模块的数据

            //           意见反馈
            for (int i = 0; i < moduleList.size(); i++) {

                if ("用户反馈".equals(moduleList.get(i).getName())) {

                    moduleList.remove(i);
                }
            }
        }else{//普通员工 RBAC权限模型
            //根据员工的角色信息 查询模块信息即可
            moduleList = moduleDao.findByUid(user.getId());


            // 意见反馈
            for (int i = 0; i < moduleList.size(); i++) {

                if ("系统反馈".equals(moduleList.get(i).getName())) {

                    moduleList.remove(i);
                }
            }
        }
        return moduleList;
    }
}
